/**
 * Copyright 2011 ArcBees Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package vn.nichecafe.client.gin;

import vn.nichecafe.client.MyConstants;
import vn.nichecafe.client.presenter.AboutNicheBandPresenter;
import vn.nichecafe.client.presenter.AboutNicheCafePresenter;
import vn.nichecafe.client.presenter.AdminPresenter;
import vn.nichecafe.client.presenter.ContactUsPresenter;
import vn.nichecafe.client.presenter.FeaturedLiveMusicSubTabPresenter;
import vn.nichecafe.client.presenter.FeaturedPresenter;
import vn.nichecafe.client.presenter.FeaturedTakeAwaySubTabPresenter;
import vn.nichecafe.client.presenter.LoginPresenter;
import vn.nichecafe.client.presenter.MyNichePresenter;
import vn.nichecafe.client.presenter.NewsEventsSubTabPresenter;
import vn.nichecafe.client.presenter.NewsNewsSubTabPresenter;
import vn.nichecafe.client.presenter.NewsPresenter;
import vn.nichecafe.client.presenter.WelcomePresenter;
import vn.nichecafe.client.ui.Content;
import vn.nichecafe.client.ui.Footer;
import vn.nichecafe.client.ui.Slider;
import vn.nichecafe.client.ui.UiModule;

import com.google.gwt.inject.client.AsyncProvider;
import com.google.gwt.inject.client.GinModules;
import com.gwtplatform.mvp.client.proxy.PlaceManager;

/**
 * The main {@link com.google.gwt.inject.client.Ginjector Ginjector} of our application.
 *
 * @author Christian Goudreau
 * @author Philippe Beaudoin
 */
@GinModules({ClientModule.class, UiModule.class})
public interface ClientGinjector extends ClientGinjectorBase {
  AsyncProvider<NewsPresenter> getNewsPresenter();
  AsyncProvider<NewsNewsSubTabPresenter> getNewsNewsSubTabPresenter();
  AsyncProvider<NewsEventsSubTabPresenter> getNewsEventsSubTabPresenter();
  AsyncProvider<AdminPresenter> getAdminPresenter();
  AsyncProvider<MyNichePresenter> getMyNichePresenter();
  AsyncProvider<ContactUsPresenter> getContactUsPresenter();
  AsyncProvider<WelcomePresenter> getWelcomePresenter();
  AsyncProvider<LoginPresenter> getLoginPresenter();
  AsyncProvider<AboutNicheCafePresenter> getAboutNicheCafePresenter();
  AsyncProvider<AboutNicheBandPresenter> getAboutNicheBandPresenter();
  
  AsyncProvider<FeaturedPresenter> getFeaturedPresenter();
  AsyncProvider<FeaturedTakeAwaySubTabPresenter> getFeaturedTakeAwaySubTabPresenter();
  AsyncProvider<FeaturedLiveMusicSubTabPresenter> getFeaturedLiveMusicSubTabPresenter();
  
  PlaceManager getPlaceManager();
  MyConstants getMyConstants();

  // The following methods allow these widgets to be used in UiBinder files
  // and participate in dependency injection.
  Slider getSlider();
  Content getContent();
  Footer getFooter();
}
